﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.OleDb;
using DAO;

namespace BALayer
{
    public class LyLichDoiTuongBA
    {
        public static DataTable selectLyLichDoiTuongAll()
        {
            string sql = "select LyLichDoiTuong.MaDoiTuong, LyLichDoiTuong.HoVaTen, LyLichDoiTuong.TenKhac, LyLichDoiTuong.NamSinh,"+
                " LyLichDoiTuong.GioiTinh, LyLichDoiTuong.QueQuan, LyLichDoiTuong.NoiOHienNay, LyLichDoiTuong.NgheNghiep, LyLichDoiTuong.ChucVu, LyLichDoiTuong.CapBac, " +
                " LyLichDoiTuong.DangPhai, LyLichDoiTuong.ThoiGianCaiTao, LyLichDoiTuong.KetQuaKDKD, LyLichDoiTuong.HoatDongChuY,"+
                "  LoaiDanhSach.TenLoai from LyLichDoiTuong INNER JOIN LoaiDanhSach ON LoaiDanhSach.MaLoai = LyLichDoiTuong.MaLoai";
            try
            {
                DataTable dt = DataAccess.Access.ExcuQuery(sql);
                return dt;
            }
            catch (Exception)
            {
                throw new Exception("Không thể load danh sách đối tượng");
            }
            
        }

        public static DataTable selectLyLichDoiTuongByLoaiDoiTuong(int maLoai)
        {
            string sql = "select LyLichDoiTuong.MaDoiTuong, LyLichDoiTuong.HoVaTen, LyLichDoiTuong.TenKhac, LyLichDoiTuong.NamSinh," +
                " LyLichDoiTuong.QueQuan, LyLichDoiTuong.NoiOHienNay, LyLichDoiTuong.NgheNghiep, LyLichDoiTuong.ChucVu, LyLichDoiTuong.CapBac, " +
                " LyLichDoiTuong.DangPhai, LyLichDoiTuong.ThoiGianCaiTao, LyLichDoiTuong.KetQuaKDKD, LyLichDoiTuong.HoatDongChuY," +
                " LyLichDoiTuong.GioiTinh, LyLichDoiTuong.MaLoai, LoaiDanhSach.TenLoai from LyLichDoiTuong INNER JOIN LoaiDanhSach ON LoaiDanhSach.MaLoai = LyLichDoiTuong.MaLoai" +
                " where MaLoai = @MaLoai";
            try
            {
                DataTable dt = DataAccess.Access.ExcuQuery(sql, new OleDbParameter("@MaLoai", maLoai));
                return dt;
            }
            catch (Exception)
            {
                throw;
            }
            
        }

        public static int countDoiTuong()
        {
            StringBuilder sql = new StringBuilder();
            sql.Append("select count(MaDoiTuong) from LyLichDoiTuong");
            DataTable data = DataAccess.Access.ExcuQuery(sql.ToString());
            int maDoiTuong = Int32.Parse(data.Rows[0].ItemArray[0].ToString());
            return maDoiTuong;
        }
        public static int insertDoiTuong(LyLichDoiTuongDAO doiTuong)
        {
            StringBuilder sql = new StringBuilder();
            sql.Append("insert into LyLichDoiTuong ");
            sql.Append("values( ");
            sql.Append(" @MaDoiTuong ");
            sql.Append(", @HoVaTen ");
            sql.Append(", @TenKhac ");
            sql.Append(", @NamSinh ");
            sql.Append(", @QueQuan ");
            sql.Append(", @NoiOHienNay ");
            sql.Append(", @NgheNghiep ");
            sql.Append(", @ChucVu ");
            sql.Append(", @CapBac ");
            sql.Append(", @DangPhai ");
            sql.Append(", @ThoiGianCaiTao ");
            sql.Append(", @KetQuaKDKD ");
            sql.Append(", @HoatDongChuY ");
            sql.Append(", @MaLoai ");
            sql.Append(", @GioiTinh)");
            try
            {
                return DataAccess.Access.ExcuNonQuery(sql.ToString(),
                    new OleDbParameter("MaDoiTuong", doiTuong.MaDoiTuong),
                    new OleDbParameter("HoVaTen", doiTuong.HoVaTen),
                    new OleDbParameter("TenKhac", doiTuong.TenKhac),
                    new OleDbParameter("NamSinh", doiTuong.NamSinh),
                    new OleDbParameter("QueQuan", doiTuong.QueQuan),
                    new OleDbParameter("NoiOHienNay", doiTuong.NoiOHienNay),
                    new OleDbParameter("NgheNghiep", doiTuong.NgheNghiep),
                    new OleDbParameter("ChucVu", doiTuong.ChucVu),
                    new OleDbParameter("CapBac", doiTuong.CapBac),
                    new OleDbParameter("DangPhai", doiTuong.DangPhai),
                    new OleDbParameter("ThoiGianCaiTao", doiTuong.ThoiGianCaiTao),
                    new OleDbParameter("KetQuaKDKD", doiTuong.KetQuaKDKD),
                    new OleDbParameter("HoatDongChuY", doiTuong.HoatDongChuY),
                    new OleDbParameter("MaLoai", doiTuong.MaLoai),
                    new OleDbParameter("GioiTinh", doiTuong.GioiTinh));
            }
            catch (Exception)
            {
                throw new Exception("Không thể thêm đối tượng");
            }
            
        }
        public static int updateDoiTuong(LyLichDoiTuongDAO doiTuong){
            StringBuilder sql = new StringBuilder();
            sql.Append("update LyLichDoiTuong ");
            sql.Append("set ");
            sql.Append(" HoVaTen = @HoVaTen");
            sql.Append(", TenKhac = @TenKhac");
            sql.Append(", NamSinh = @NamSinh");
            sql.Append(", QueQuan = @QueQuan");
            sql.Append(", NoiOHienNay = @NoiOHienNay");
            sql.Append(", NgheNghiep = @NgheNghiep");
            sql.Append(", ChucVu = @ChucVu");
            sql.Append(", CapBac = @CapBac");
            sql.Append(", DangPhai = @DangPhai");
            sql.Append(", KetQuaKDKD = @KetQuaKDKD");
            sql.Append(", ThoiGianCaiTao = @ThoiGianCaiTao");
            sql.Append(", HoatDongChuY = @HoatDongChuY");
            sql.Append(", GioiTinh = @GioiTinh");
            sql.Append(", MaLoai = @MaLoai ");
            sql.Append(" where MaDoiTuong = @MaDoiTuong");
            try
            {
                return DataAccess.Access.ExcuNonQuery(sql.ToString(),
                    new OleDbParameter("HoVaTen", doiTuong.HoVaTen),
                    new OleDbParameter("TenKhac", doiTuong.TenKhac),
                    new OleDbParameter("NamSinh", doiTuong.NamSinh),
                    new OleDbParameter("QueQuan", doiTuong.QueQuan),
                    new OleDbParameter("NoiOHienNay", doiTuong.NoiOHienNay),
                    new OleDbParameter("NgheNghiep", doiTuong.NgheNghiep),
                    new OleDbParameter("ChucVu", doiTuong.ChucVu),
                    new OleDbParameter("CapBac", doiTuong.CapBac),
                    new OleDbParameter("DangPhai", doiTuong.DangPhai),
                    new OleDbParameter("KetQuaKDKD", doiTuong.KetQuaKDKD),
                    new OleDbParameter("ThoiGianCaiTao", doiTuong.ThoiGianCaiTao),
                    new OleDbParameter("HoatDongChuY", doiTuong.HoatDongChuY),
                    new OleDbParameter("GioiTinh", doiTuong.GioiTinh),
                    new OleDbParameter("MaLoai", doiTuong.MaLoai),
                    new OleDbParameter("MaDoiTuong", doiTuong.MaDoiTuong));
            }
            catch (Exception)
            {
                throw new Exception("Không thể cập nhật thông tin đối tượng");
            }
            
        }
        public static int deleteDoiTuong(string maDoiTuong){
            StringBuilder sql = new StringBuilder();
            sql.Append("delete from LyLichDoiTuong ");
            sql.Append("where MaDoiTuong = @MaDoiTuong");
            try
            {
                return DataAccess.Access.ExcuNonQuery(sql.ToString(),
                    new OleDbParameter("MaDoiTuong", maDoiTuong));
            }
            catch (Exception)
            {
                throw new Exception("Không thể xóa đối tượng");
            }
            
        }
        public static DataTable selectDoiTuongByLoaiAndTen(int maLoai, String tenDoiTuong)
        {
            int soLuongSQL = 0;
            StringBuilder sql = new StringBuilder();
            DataTable dt = new DataTable();
            sql.Append("select LyLichDoiTuong.MaDoiTuong, LyLichDoiTuong.HoVaTen, LyLichDoiTuong.TenKhac, LyLichDoiTuong.NamSinh, ");
            sql.Append(" LyLichDoiTuong.QueQuan, LyLichDoiTuong.NoiOHienNay, LyLichDoiTuong.NgheNghiep, LyLichDoiTuong.ChucVu, LyLichDoiTuong.CapBac, ");
            sql.Append(" LyLichDoiTuong.DangPhai, LyLichDoiTuong.ThoiGianCaiTao, LyLichDoiTuong.KetQuaKDKD, LyLichDoiTuong.HoatDongChuY, ");
            sql.Append(" LyLichDoiTuong.GioiTinh, LoaiDanhSach.TenLoai from LyLichDoiTuong INNER JOIN LoaiDanhSach ON LoaiDanhSach.MaLoai = LyLichDoiTuong.MaLoai ");
            sql.Append(" where 1 = 1");
            if (maLoai != -1)
            {
                sql.Append(" and LoaiDanhSach.MaLoai = @MaLoai");
                soLuongSQL = 1;
            }
            if (!"".Equals(tenDoiTuong))
            {
                sql.Append(" and LyLichDoiTuong.HoVaTen like @HoVaTen");
                if (soLuongSQL == 0)
                {
                    soLuongSQL = 2;
                }
                else
                {
                    soLuongSQL = 3;
                }

            }
            try
            {
                if (soLuongSQL == 1)
                {
                    dt = DataAccess.Access.ExcuQuery(sql.ToString(),
                    new OleDbParameter("@MaLoai", maLoai));
                }
                else if (soLuongSQL == 2)
                {
                    dt = DataAccess.Access.ExcuQuery(sql.ToString(),
                    new OleDbParameter("@HoVaTen", "%" + tenDoiTuong + "%"));
                }
                else
                {
                    dt = DataAccess.Access.ExcuQuery(sql.ToString(),
                        new OleDbParameter("@MaLoai", maLoai),
                        new OleDbParameter("@HoVaTen", "%" + tenDoiTuong + "%"));
                }
                return dt;
            }
            catch (Exception)
            {
                throw;
            }
            
        }
        public static LyLichDoiTuongDAO getDoiTuong(string maDoiTuong)
        {
            StringBuilder sql = new StringBuilder();
            sql.Append("select LyLichDoiTuong.MaDoiTuong, LyLichDoiTuong.HoVaTen, LyLichDoiTuong.TenKhac, LyLichDoiTuong.NamSinh, ");
            sql.Append(" LyLichDoiTuong.QueQuan, LyLichDoiTuong.NoiOHienNay, LyLichDoiTuong.NgheNghiep, LyLichDoiTuong.ChucVu, LyLichDoiTuong.CapBac, ");
            sql.Append(" LyLichDoiTuong.DangPhai, LyLichDoiTuong.ThoiGianCaiTao, LyLichDoiTuong.KetQuaKDKD, LyLichDoiTuong.HoatDongChuY, ");
            sql.Append(" LyLichDoiTuong.GioiTinh, LyLichDoiTuong.MaLoai from LyLichDoiTuong");
            sql.Append(" where LyLichDoiTuong.MaDoiTuong = @MaDoiTuong");
            try
            {
                DataTable dt = DataAccess.Access.ExcuQuery(sql.ToString(),
                new OleDbParameter("@MaDoiTuong", maDoiTuong));

                LyLichDoiTuongDAO doiTuong = new LyLichDoiTuongDAO();
                doiTuong.MaDoiTuong = dt.Rows[0].ItemArray[0].ToString();
                doiTuong.HoVaTen = dt.Rows[0].ItemArray[1].ToString();
                doiTuong.TenKhac = dt.Rows[0].ItemArray[2].ToString();
                doiTuong.NamSinh = dt.Rows[0].ItemArray[3].ToString();
                doiTuong.QueQuan = dt.Rows[0].ItemArray[4].ToString();
                doiTuong.NoiOHienNay = dt.Rows[0].ItemArray[5].ToString();
                doiTuong.NgheNghiep = dt.Rows[0].ItemArray[6].ToString();
                doiTuong.ChucVu = dt.Rows[0].ItemArray[7].ToString();
                doiTuong.CapBac = dt.Rows[0].ItemArray[8].ToString();
                doiTuong.DangPhai = dt.Rows[0].ItemArray[9].ToString();
                doiTuong.ThoiGianCaiTao = dt.Rows[0].ItemArray[10].ToString();
                doiTuong.KetQuaKDKD = dt.Rows[0].ItemArray[11].ToString();
                doiTuong.HoatDongChuY = dt.Rows[0].ItemArray[12].ToString();
                doiTuong.GioiTinh = dt.Rows[0].ItemArray[13].ToString();
                doiTuong.MaLoai = Int32.Parse(dt.Rows[0].ItemArray[14].ToString());
                return doiTuong;
            }
            catch (Exception)
            {
                throw new Exception("Không thể lấy thông tin đối tượng");
            }
            
        }
        public static Boolean checkDoiTuong(String maDoiTuong)
        {
            Boolean check = false;
            StringBuilder sql = new StringBuilder();
            sql.Append("select count(MaDoiTuong) from LyLichDoiTuong where MaDoiTuong = @MaDoiTuong");
            try
            {
                DataTable dt = DataAccess.Access.ExcuQuery(sql.ToString(), new OleDbParameter("MaDoiTuong", maDoiTuong));
                if ("1".Equals(dt.Rows[0].ItemArray[0].ToString()))
                {
                    check = true;
                }
                return check;
            }
            catch (Exception)
            {
                throw;
            }
            
        }
    }
}
